package com.haixiaoke.saas.lock.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.common.core.page.TableDataInfo;
import com.haixiaoke.saas.lock.domain.DeviceLock;
import com.haixiaoke.saas.user.domain.User;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 设备锁Service接口
 *
 * @author panda
 * @date 2025-04-02
 */
public interface IDeviceLockService {
    /**
     * 查询设备锁和相关数据
     *
     * @param lockId 设备锁主键
     * @return 设备锁
     */
    DeviceLock selectDeviceLockById(Long lockId);

    /**
     * 查询设备锁
     * @param lockId
     * @return
     */
    DeviceLock selectDeviceLockByLockId(Long lockId);

    /**
     * 查询设备锁列表
     *
     * @param deviceLock 设备锁
     * @return 设备锁集合
     */
    List<DeviceLock> selectDeviceLockList(DeviceLock deviceLock);

    List<DeviceLock> selectLockList(DeviceLock deviceLock);

    /**
     * 新增设备锁
     *
     * @param deviceLock 设备锁
     * @return 结果
     */
    AjaxResult insertDeviceLock(DeviceLock deviceLock, User user);

    /**
     * 修改设备锁
     *
     * @param deviceLock 设备锁
     * @return 结果
     */
    AjaxResult updateDeviceLock(DeviceLock deviceLock);

    /**
     * 删除设备锁信息
     *
     * @param lockId 设备锁主键
     * @return 结果
     */
     AjaxResult deleteDeviceLockByLockId(Long lockId, Long longUserId);

    /**
     * 开锁记录
     *
     * @param lockId     锁主键
     * @param unlockTime 开锁时间
     * @param userName 用户名称
     * @param pwdId 密码编号
     * @param unlockType 锁类型
     * @param pageNum    页码
     * @param pageSize   页大小
     * @return 锁定记录
     */
    TableDataInfo unlockingRecord(Long lockId, Date unlockTime, String userName, Long pwdId, Integer unlockType, Integer pageNum, Integer pageSize);

    /**
     * 电量同步任务
     */
    void batterySyncTask();

    /**
     * 根据型号id查询设备锁数量统计
     * @param modelId 型号id
     * @return
     */
    int countDeviceLockByModelId(Long modelId);


    /**
     * 管理端新增设备锁
     * @param deviceLock
     * @return
     */
    AjaxResult manageInsertDeviceLock(DeviceLock deviceLock);

    /**
     * 在线状态同步任务--晚上3点执行一次
     */
    void onlineStatusSyncTask();

    /**
     * 首页统计设备锁在线状态
     *
     * @return
     */
    Map<String, Map<String, Object>> homePageCountOnlineStatus();

}
